﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ImobitechDao;
using ImobitechModel.Facade;
using ImobitechModel.com.Constantes;

namespace ImobitechModel.com.Controller
{
    public class ControladorPerfis
    {
        public Object retornaFuncionarios(IDictionary<string, string> values)
        {
            Pessoa pessoa = new Pessoa();

            PerfilFacade perfilFacade = PerfilFacade.getInstance();
            return perfilFacade.retornaFuncionarios();
        }

        public Object retornaFuncionario(IDictionary<string, string> values)
        {
            Pessoa plan = new Pessoa();
            int id = int.Parse(values.First(p => p.Key == NomeCampoConstantes.campo_pessoaId).Value);
            PerfilFacade perfilFacade = PerfilFacade.getInstance();
            Pessoa pessoa = (Pessoa)perfilFacade.retornaPerfil(id);

            IDictionary<string, string> funcionario = new Dictionary<string, string>();

            funcionario.Add(NomeCampoConstantes.campo_pessoaNome, pessoa.Name);
            funcionario.Add(NomeCampoConstantes.campo_pessoaSobrenome, pessoa.LastName);

            funcionario.Add(NomeCampoConstantes.campo_funcionarioEndereco,
                pessoa.Pessoa_Papel.First().Dados_Pessoa_Papel.Where(p => p.descricao == NomeCampoConstantes.campo_funcionarioEndereco).First().valor);
            funcionario.Add(NomeCampoConstantes.campo_funcionarioComplemento,
                pessoa.Pessoa_Papel.First().Dados_Pessoa_Papel.Where(p => p.descricao == NomeCampoConstantes.campo_funcionarioComplemento).First().valor);
            funcionario.Add(NomeCampoConstantes.campo_funcionarioCidade,
                pessoa.Pessoa_Papel.First().Dados_Pessoa_Papel.Where(p => p.descricao == NomeCampoConstantes.campo_funcionarioCidade).First().valor);
            funcionario.Add(NomeCampoConstantes.campo_funcionarioBairro,
                pessoa.Pessoa_Papel.First().Dados_Pessoa_Papel.Where(p => p.descricao == NomeCampoConstantes.campo_funcionarioBairro).First().valor);
            funcionario.Add(NomeCampoConstantes.campo_funcionarioCep,
                pessoa.Pessoa_Papel.First().Dados_Pessoa_Papel.Where(p => p.descricao == NomeCampoConstantes.campo_funcionarioCep).First().valor);

            funcionario.Add(NomeCampoConstantes.campo_pessoaResidencial, pessoa.HomePhone.ToString());
            funcionario.Add(NomeCampoConstantes.campo_pessoaCelular, pessoa.CelPhone.ToString());

            funcionario.Add(NomeCampoConstantes.campo_funcionarioCarteiraTrabalho,
                pessoa.Pessoa_Papel.First().Dados_Pessoa_Papel.Where(p => p.descricao == NomeCampoConstantes.campo_funcionarioCarteiraTrabalho).First().valor);
            funcionario.Add(NomeCampoConstantes.campo_funcionarioDataEntrada,
                pessoa.Pessoa_Papel.First().Dados_Pessoa_Papel.Where(p => p.descricao == NomeCampoConstantes.campo_funcionarioDataEntrada).First().valor);
            funcionario.Add(NomeCampoConstantes.campo_funcionarioDataSaida,
                pessoa.Pessoa_Papel.First().Dados_Pessoa_Papel.Where(p => p.descricao == NomeCampoConstantes.campo_funcionarioDataSaida).First().valor);
            funcionario.Add(NomeCampoConstantes.campo_funcionarioSalario,
                pessoa.Pessoa_Papel.First().Dados_Pessoa_Papel.Where(p => p.descricao == NomeCampoConstantes.campo_funcionarioSalario).First().valor);

            funcionario.Add(NomeCampoConstantes.campo_pessoaLogin, pessoa.Login);


            return funcionario;
        }

        public Object inserirFuncinario(IDictionary<string, string> values)
        {
            Pessoa pessoa = new Pessoa();
            pessoa.Name = values.First(p => p.Key == NomeCampoConstantes.campo_pessoaNome).Value;
            pessoa.HomePhone = values.First(p => p.Key == NomeCampoConstantes.campo_pessoaResidencial).Value;
            pessoa.CelPhone = values.First(p => p.Key == NomeCampoConstantes.campo_pessoaCelular).Value;
            pessoa.Login = values.First(p => p.Key == NomeCampoConstantes.campo_pessoaLogin).Value;
            pessoa.password = values.First(p => p.Key == NomeCampoConstantes.campo_pessoaSenha).Value;
            pessoa.LastName = values.First(p => p.Key == NomeCampoConstantes.campo_pessoaSobrenome).Value;
            PerfilFacade perfilFacade = PerfilFacade.getInstance();
            Papel papel = (Papel)perfilFacade.retornaPapel("Funcionario");

            Pessoa_Papel pessoaPapel = new Pessoa_Papel();
            pessoaPapel.Papel = papel;

            Dados_Pessoa_Papel dados = new Dados_Pessoa_Papel();
            dados.descricao = NomeCampoConstantes.campo_funcionarioEndereco;
            dados.valor = values.First(p => p.Key == NomeCampoConstantes.campo_funcionarioEndereco).Value;
            pessoaPapel.Dados_Pessoa_Papel.Add(dados);

            dados = new Dados_Pessoa_Papel();
            dados.descricao = NomeCampoConstantes.campo_funcionarioComplemento;
            dados.valor = values.First(p => p.Key == NomeCampoConstantes.campo_funcionarioComplemento).Value;
            pessoaPapel.Dados_Pessoa_Papel.Add(dados);

            dados = new Dados_Pessoa_Papel();
            dados.descricao = NomeCampoConstantes.campo_funcionarioCidade;
            dados.valor = values.First(p => p.Key == NomeCampoConstantes.campo_funcionarioCidade).Value;
            pessoaPapel.Dados_Pessoa_Papel.Add(dados);

            dados = new Dados_Pessoa_Papel();
            dados.descricao = NomeCampoConstantes.campo_funcionarioBairro;
            dados.valor = values.First(p => p.Key == NomeCampoConstantes.campo_funcionarioBairro).Value;
            pessoaPapel.Dados_Pessoa_Papel.Add(dados);

            dados = new Dados_Pessoa_Papel();
            dados.descricao = NomeCampoConstantes.campo_funcionarioCep;
            dados.valor = values.First(p => p.Key == NomeCampoConstantes.campo_funcionarioCep).Value;
            pessoaPapel.Dados_Pessoa_Papel.Add(dados);

            dados = new Dados_Pessoa_Papel();
            dados.descricao = NomeCampoConstantes.campo_funcionarioCarteiraTrabalho;
            dados.valor = values.First(p => p.Key == NomeCampoConstantes.campo_funcionarioCarteiraTrabalho).Value;
            pessoaPapel.Dados_Pessoa_Papel.Add(dados);

            dados = new Dados_Pessoa_Papel();
            dados.descricao = NomeCampoConstantes.campo_funcionarioDataEntrada;
            dados.valor = values.First(p => p.Key == NomeCampoConstantes.campo_funcionarioDataEntrada).Value;
            pessoaPapel.Dados_Pessoa_Papel.Add(dados);

            dados = new Dados_Pessoa_Papel();
            dados.descricao = NomeCampoConstantes.campo_funcionarioDataSaida;
            dados.valor = values.First(p => p.Key == NomeCampoConstantes.campo_funcionarioDataSaida).Value;
            pessoaPapel.Dados_Pessoa_Papel.Add(dados);

            dados = new Dados_Pessoa_Papel();
            dados.descricao = NomeCampoConstantes.campo_funcionarioSalario;
            dados.valor = values.First(p => p.Key == NomeCampoConstantes.campo_funcionarioSalario).Value;
            pessoaPapel.Dados_Pessoa_Papel.Add(dados);

            pessoa.Pessoa_Papel.Add(pessoaPapel);
            return perfilFacade.insertPerfil(pessoa);
        }

        public Object editarFuncionario(IDictionary<string, string> values)
        {
            //plan.Id = int.Parse(values.First(p => p.Key == NomeCampoConstantes.campo_planId).Value);
            PerfilFacade perfilFacade = PerfilFacade.getInstance();
            Pessoa pessoa = (Pessoa)perfilFacade.retornaPerfil(int.Parse(values.First(p => p.Key == NomeCampoConstantes.campo_pessoaId).Value), "Funcionario");
            pessoa.Name = values.First(p => p.Key == NomeCampoConstantes.campo_pessoaNome).Value;
            pessoa.HomePhone = values.First(p => p.Key == NomeCampoConstantes.campo_pessoaResidencial).Value;
            pessoa.CelPhone = values.First(p => p.Key == NomeCampoConstantes.campo_pessoaCelular).Value;
            pessoa.Login = values.First(p => p.Key == NomeCampoConstantes.campo_pessoaLogin).Value;
            pessoa.password = values.First(p => p.Key == NomeCampoConstantes.campo_pessoaSenha).Value;
            pessoa.LastName = values.First(p => p.Key == NomeCampoConstantes.campo_pessoaSobrenome).Value;

            Pessoa_Papel pessoaPapel = pessoa.Pessoa_Papel.First();

            Dados_Pessoa_Papel dados = pessoaPapel.Dados_Pessoa_Papel.FirstOrDefault(p => p.descricao == NomeCampoConstantes.campo_funcionarioEndereco);
            //dados.descricao = NomeCampoConstantes.campo_funcionarioSobrenome;
            //dados.valor = values.First(p => p.Key == NomeCampoConstantes.campo_funcionarioSobrenome).Value;

            //dados = pessoaPapel.Dados_Pessoa_Papel.FirstOrDefault(p => p.descricao == NomeCampoConstantes.campo_funcionarioEndereco);
            dados.descricao = NomeCampoConstantes.campo_funcionarioEndereco;
            dados.valor = values.First(p => p.Key == NomeCampoConstantes.campo_funcionarioEndereco).Value;
            pessoaPapel.Dados_Pessoa_Papel.Add(dados);

            dados = pessoaPapel.Dados_Pessoa_Papel.FirstOrDefault(p => p.descricao == NomeCampoConstantes.campo_funcionarioComplemento);
            dados.descricao = NomeCampoConstantes.campo_funcionarioComplemento;
            dados.valor = values.First(p => p.Key == NomeCampoConstantes.campo_funcionarioComplemento).Value;
            pessoaPapel.Dados_Pessoa_Papel.Add(dados);

            dados = pessoaPapel.Dados_Pessoa_Papel.FirstOrDefault(p => p.descricao == NomeCampoConstantes.campo_funcionarioCidade);
            dados.descricao = NomeCampoConstantes.campo_funcionarioCidade;
            dados.valor = values.First(p => p.Key == NomeCampoConstantes.campo_funcionarioCidade).Value;
            pessoaPapel.Dados_Pessoa_Papel.Add(dados);

            dados = pessoaPapel.Dados_Pessoa_Papel.FirstOrDefault(p => p.descricao == NomeCampoConstantes.campo_funcionarioBairro);
            dados.descricao = NomeCampoConstantes.campo_funcionarioBairro;
            dados.valor = values.First(p => p.Key == NomeCampoConstantes.campo_funcionarioBairro).Value;
            pessoaPapel.Dados_Pessoa_Papel.Add(dados);

            dados = pessoaPapel.Dados_Pessoa_Papel.FirstOrDefault(p => p.descricao == NomeCampoConstantes.campo_funcionarioCep);
            dados.descricao = NomeCampoConstantes.campo_funcionarioCep;
            dados.valor = values.First(p => p.Key == NomeCampoConstantes.campo_funcionarioCep).Value;
            pessoaPapel.Dados_Pessoa_Papel.Add(dados);

            dados = pessoaPapel.Dados_Pessoa_Papel.FirstOrDefault(p => p.descricao == NomeCampoConstantes.campo_funcionarioCarteiraTrabalho);
            dados.descricao = NomeCampoConstantes.campo_funcionarioCarteiraTrabalho;
            dados.valor = values.First(p => p.Key == NomeCampoConstantes.campo_funcionarioCarteiraTrabalho).Value;
            pessoaPapel.Dados_Pessoa_Papel.Add(dados);

            dados = pessoaPapel.Dados_Pessoa_Papel.FirstOrDefault(p => p.descricao == NomeCampoConstantes.campo_funcionarioDataEntrada);
            dados.descricao = NomeCampoConstantes.campo_funcionarioDataEntrada;
            dados.valor = values.First(p => p.Key == NomeCampoConstantes.campo_funcionarioDataEntrada).Value;
            pessoaPapel.Dados_Pessoa_Papel.Add(dados);

            dados = pessoaPapel.Dados_Pessoa_Papel.FirstOrDefault(p => p.descricao == NomeCampoConstantes.campo_funcionarioDataSaida);
            dados.descricao = NomeCampoConstantes.campo_funcionarioDataSaida;
            dados.valor = values.First(p => p.Key == NomeCampoConstantes.campo_funcionarioDataSaida).Value;
            pessoaPapel.Dados_Pessoa_Papel.Add(dados);

            dados = pessoaPapel.Dados_Pessoa_Papel.FirstOrDefault(p => p.descricao == NomeCampoConstantes.campo_funcionarioSalario);
            dados.descricao = NomeCampoConstantes.campo_funcionarioSalario;
            dados.valor = values.First(p => p.Key == NomeCampoConstantes.campo_funcionarioSalario).Value;
            pessoaPapel.Dados_Pessoa_Papel.Add(dados);

            return perfilFacade.editaPerfil(pessoa);
        }

        public Object inserirProprietario(IDictionary<string, string> values)
        {
            Pessoa pessoa = new Pessoa();
            pessoa.Name = values.First(p => p.Key == NomeCampoConstantes.campo_pessoaNome).Value;
            pessoa.HomePhone = values.First(p => p.Key == NomeCampoConstantes.campo_pessoaResidencial).Value;
            pessoa.CelPhone = values.First(p => p.Key == NomeCampoConstantes.campo_pessoaCelular).Value;
            pessoa.Login = values.First(p => p.Key == NomeCampoConstantes.campo_pessoaLogin).Value;
            pessoa.password = values.First(p => p.Key == NomeCampoConstantes.campo_pessoaSenha).Value;
            pessoa.LastName = values.First(p => p.Key == NomeCampoConstantes.campo_pessoaSobrenome).Value;
            PerfilFacade perfilFacade = PerfilFacade.getInstance();
            Papel papel = (Papel)perfilFacade.retornaPapel("Dono");
            Papel papelCliente = (Papel)perfilFacade.retornaPapel("Cliente");

            Pessoa_Papel pessoaPapel = new Pessoa_Papel();
            pessoaPapel.Papel = papel;

            Pessoa_Papel pessoaPapelCliente = new Pessoa_Papel();
            pessoaPapelCliente.Papel = papelCliente;

            Dados_Pessoa_Papel dados = new Dados_Pessoa_Papel();
            dados.descricao = NomeCampoConstantes.campo_funcionarioEndereco;
            dados.valor = values.First(p => p.Key == NomeCampoConstantes.campo_funcionarioEndereco).Value;
            pessoaPapel.Dados_Pessoa_Papel.Add(dados);
            pessoaPapelCliente.Dados_Pessoa_Papel.Add(dados);

            dados = new Dados_Pessoa_Papel();
            dados.descricao = NomeCampoConstantes.campo_funcionarioComplemento;
            dados.valor = values.First(p => p.Key == NomeCampoConstantes.campo_funcionarioComplemento).Value;
            pessoaPapel.Dados_Pessoa_Papel.Add(dados);
            pessoaPapelCliente.Dados_Pessoa_Papel.Add(dados);

            dados = new Dados_Pessoa_Papel();
            dados.descricao = NomeCampoConstantes.campo_funcionarioCidade;
            dados.valor = values.First(p => p.Key == NomeCampoConstantes.campo_funcionarioCidade).Value;
            pessoaPapel.Dados_Pessoa_Papel.Add(dados);
            pessoaPapelCliente.Dados_Pessoa_Papel.Add(dados);

            dados = new Dados_Pessoa_Papel();
            dados.descricao = NomeCampoConstantes.campo_funcionarioBairro;
            dados.valor = values.First(p => p.Key == NomeCampoConstantes.campo_funcionarioBairro).Value;
            pessoaPapel.Dados_Pessoa_Papel.Add(dados);
            pessoaPapelCliente.Dados_Pessoa_Papel.Add(dados);

            dados = new Dados_Pessoa_Papel();
            dados.descricao = NomeCampoConstantes.campo_funcionarioCep;
            dados.valor = values.First(p => p.Key == NomeCampoConstantes.campo_funcionarioCep).Value;
            pessoaPapel.Dados_Pessoa_Papel.Add(dados);
            pessoaPapelCliente.Dados_Pessoa_Papel.Add(dados);

            dados = new Dados_Pessoa_Papel();
            dados.descricao = NomeCampoConstantes.campo_pessoaComercial;
            dados.valor = values.First(p => p.Key == NomeCampoConstantes.campo_pessoaComercial).Value;
            pessoaPapel.Dados_Pessoa_Papel.Add(dados);
            pessoaPapelCliente.Dados_Pessoa_Papel.Add(dados);
            
            //pessoaPapelCliente.Dados_Pessoa_Papel.Add();

            pessoa.Pessoa_Papel.Add(pessoaPapel);
            pessoa.Pessoa_Papel.Add(pessoaPapelCliente);
            return perfilFacade.insertPerfil(pessoa);
        }

        public Object inserirCliente(IDictionary<string, string> values)
        {
            Pessoa pessoa = new Pessoa();
            pessoa.Name = values.First(p => p.Key == NomeCampoConstantes.campo_pessoaNome).Value;
            pessoa.HomePhone = values.First(p => p.Key == NomeCampoConstantes.campo_pessoaResidencial).Value;
            pessoa.CelPhone = values.First(p => p.Key == NomeCampoConstantes.campo_pessoaCelular).Value;
            pessoa.Login = values.First(p => p.Key == NomeCampoConstantes.campo_pessoaLogin).Value;
            pessoa.password = values.First(p => p.Key == NomeCampoConstantes.campo_pessoaSenha).Value;
            pessoa.LastName = values.First(p => p.Key == NomeCampoConstantes.campo_pessoaSobrenome).Value;
            PerfilFacade perfilFacade = PerfilFacade.getInstance();
            Papel papel = (Papel)perfilFacade.retornaPapel("Cliente");

            Pessoa_Papel pessoaPapel = new Pessoa_Papel();
            pessoaPapel.Papel = papel;

            Dados_Pessoa_Papel dados = new Dados_Pessoa_Papel();
            dados.descricao = NomeCampoConstantes.campo_funcionarioEndereco;
            dados.valor = values.First(p => p.Key == NomeCampoConstantes.campo_funcionarioEndereco).Value;
            pessoaPapel.Dados_Pessoa_Papel.Add(dados);

            dados = new Dados_Pessoa_Papel();
            dados.descricao = NomeCampoConstantes.campo_funcionarioComplemento;
            dados.valor = values.First(p => p.Key == NomeCampoConstantes.campo_funcionarioComplemento).Value;
            pessoaPapel.Dados_Pessoa_Papel.Add(dados);

            dados = new Dados_Pessoa_Papel();
            dados.descricao = NomeCampoConstantes.campo_funcionarioCidade;
            dados.valor = values.First(p => p.Key == NomeCampoConstantes.campo_funcionarioCidade).Value;
            pessoaPapel.Dados_Pessoa_Papel.Add(dados);

            dados = new Dados_Pessoa_Papel();
            dados.descricao = NomeCampoConstantes.campo_funcionarioBairro;
            dados.valor = values.First(p => p.Key == NomeCampoConstantes.campo_funcionarioBairro).Value;
            pessoaPapel.Dados_Pessoa_Papel.Add(dados);

            dados = new Dados_Pessoa_Papel();
            dados.descricao = NomeCampoConstantes.campo_funcionarioCep;
            dados.valor = values.First(p => p.Key == NomeCampoConstantes.campo_funcionarioCep).Value;
            pessoaPapel.Dados_Pessoa_Papel.Add(dados);

            pessoa.Pessoa_Papel.Add(pessoaPapel);
            return perfilFacade.insertPerfil(pessoa);
        }

        public Object retornaPessoa(int id)
        {
            PerfilFacade _perfilFacade = PerfilFacade.getInstance();
            return _perfilFacade.retornaPessoa(id);
        }

        public Object login(IDictionary<string, string> values)
        {
            PerfilFacade _perfilFacade = PerfilFacade.getInstance();
            Pessoa pessoa = (Pessoa)_perfilFacade.login(values.First(p => p.Key == NomeCampoConstantes.campo_Login).Value,
                values.First(p => p.Key == NomeCampoConstantes.campo_Senha).Value);

            Logar login = new Logar();
            login.papeis = new List<Papeis>();
            if (pessoa != null)
            {
                for (int index = 0; index < pessoa.Pessoa_Papel.Count; index++)
                {
                    if (pessoa.Pessoa_Papel.FirstOrDefault(p => p.Papel.Nome == "Dono") != null)
                    {
                        Papeis papel = new Papeis("dono");
                        login.papeis.Add(papel);
                        login.nome = pessoa.Name;
                        login.url = "~/Imovel/ListarImovel.aspx";
                        login.idPessoa = pessoa.Id;
                    }
                    if (pessoa.Pessoa_Papel.FirstOrDefault(p => p.Papel.Nome == "Locatario") != null)
                    {
                        Papeis papel = new Papeis("Locatario");
                        login.papeis.Add(papel);
                        if (string.IsNullOrEmpty(login.nome))
                        {
                            login.nome = pessoa.Name;
                            login.url = "~/Imovel/locacoes.aspx";
                            login.idPessoa = pessoa.Id;
                        }
                    }
                    if (pessoa.Pessoa_Papel.FirstOrDefault(p => p.Papel.Nome == "Cliente") != null)
                    {
                        Papeis papel = new Papeis("Cliente");
                        login.papeis.Add(papel);
                        if (string.IsNullOrEmpty(login.nome))
                        {
                            login.nome = pessoa.Name;
                            login.url = "~/Anuncio/BuscaAnuncios.aspx";
                            login.idPessoa = pessoa.Id;
                        }
                    }
                }
            }

            return login;
        }

        public Object loginAdmin(IDictionary<string, string> values)
        {
            PerfilFacade _perfilFacade = PerfilFacade.getInstance();
            Pessoa pessoa = (Pessoa)_perfilFacade.login(values.First(p => p.Key == NomeCampoConstantes.campo_Login).Value,
                values.First(p => p.Key == NomeCampoConstantes.campo_Senha).Value);

            Logar login = new Logar();
            login.papeis = new List<Papeis>();
            if (pessoa != null)
            {
                for (int index = 0; index < pessoa.Pessoa_Papel.Count; index++)
                {
                    if (pessoa.Pessoa_Papel.FirstOrDefault(p => p.Papel.Nome == "Funcionario") != null)
                    {
                        Papeis papel = new Papeis("Funcionario");
                        papel.id = pessoa.Pessoa_Papel.FirstOrDefault(p => p.Papel.Nome == "Funcionario").Id;
                        login.papeis.Add(papel);
                        login.nome = pessoa.Name;
                        login.url = "~/Gestao/fluxoCaixa.aspx";
                        login.idPessoa = pessoa.Id;
                    }
                    if (pessoa.Pessoa_Papel.FirstOrDefault(p => p.Papel.Nome == "Corretor") != null)
                    {
                        Papeis papel = new Papeis("Corretor");
                        papel.id = pessoa.Pessoa_Papel.FirstOrDefault(p => p.Papel.Nome == "Corretor").Id;
                        login.papeis.Add(papel);
                        if (string.IsNullOrEmpty(login.nome))
                        {
                            login.nome = pessoa.Name;
                            login.url = "~/Gestao/Visita.aspx";
                            login.idPessoa = pessoa.Id;
                        }
                    }
                    if (pessoa.Pessoa_Papel.FirstOrDefault(p => p.Papel.Nome == "Dono") != null)
                    {
                        Papeis papel = new Papeis("dono");
                        papel.id = pessoa.Pessoa_Papel.FirstOrDefault(p => p.Papel.Nome == "Dono").Id;
                        login.papeis.Add(papel);
                        if (string.IsNullOrEmpty(login.nome))
                        {
                            login.nome = pessoa.Name;
                            login.url = "~/Gestao/fluxoCaixa.aspx";
                            login.idPessoa = pessoa.Id;
                        }
                    }
                }
            }

            return login;
        }

        public Object retornaPapel(int id)
        {
            PerfilFacade _perfilFacade = PerfilFacade.getInstance();
            return _perfilFacade.retornaPapel(id);
        }

        public Object retornaPapelbyId(int id)
        {
            PerfilFacade _perfilFacade = PerfilFacade.getInstance();
            return _perfilFacade.retornaPapelbyId(id);
        }

        public Object atualizarCliente(IDictionary<string, string> values)
        {
            PerfilFacade perfilFacade = PerfilFacade.getInstance();
            Pessoa pessoa = (Pessoa)perfilFacade.retornaPerfil(int.Parse(values.First(p => p.Key == NomeCampoConstantes.campo_pessoaId).Value));
            pessoa.Name = values.First(p => p.Key == NomeCampoConstantes.campo_pessoaNome).Value;
            pessoa.HomePhone = values.First(p => p.Key == NomeCampoConstantes.campo_pessoaResidencial).Value;
            pessoa.CelPhone = values.First(p => p.Key == NomeCampoConstantes.campo_pessoaCelular).Value;
            pessoa.Login = values.First(p => p.Key == NomeCampoConstantes.campo_pessoaLogin).Value;
            pessoa.password = values.First(p => p.Key == NomeCampoConstantes.campo_pessoaSenha).Value;
            pessoa.LastName = values.First(p => p.Key == NomeCampoConstantes.campo_pessoaSobrenome).Value;

            Pessoa_Papel pessoaPapel = pessoa.Pessoa_Papel.First();

            Dados_Pessoa_Papel dados = pessoaPapel.Dados_Pessoa_Papel.FirstOrDefault(p => p.descricao == NomeCampoConstantes.campo_funcionarioEndereco);
            //dados.descricao = NomeCampoConstantes.campo_funcionarioSobrenome;
            //dados.valor = values.First(p => p.Key == NomeCampoConstantes.campo_funcionarioSobrenome).Value;

            //dados = pessoaPapel.Dados_Pessoa_Papel.FirstOrDefault(p => p.descricao == NomeCampoConstantes.campo_funcionarioEndereco);
            dados.descricao = NomeCampoConstantes.campo_funcionarioEndereco;
            dados.valor = values.First(p => p.Key == NomeCampoConstantes.campo_funcionarioEndereco).Value;
            pessoaPapel.Dados_Pessoa_Papel.Add(dados);

            dados = pessoaPapel.Dados_Pessoa_Papel.FirstOrDefault(p => p.descricao == NomeCampoConstantes.campo_funcionarioComplemento);
            dados.descricao = NomeCampoConstantes.campo_funcionarioComplemento;
            dados.valor = values.First(p => p.Key == NomeCampoConstantes.campo_funcionarioComplemento).Value;
            pessoaPapel.Dados_Pessoa_Papel.Add(dados);

            dados = pessoaPapel.Dados_Pessoa_Papel.FirstOrDefault(p => p.descricao == NomeCampoConstantes.campo_funcionarioCidade);
            dados.descricao = NomeCampoConstantes.campo_funcionarioCidade;
            dados.valor = values.First(p => p.Key == NomeCampoConstantes.campo_funcionarioCidade).Value;
            pessoaPapel.Dados_Pessoa_Papel.Add(dados);

            dados = pessoaPapel.Dados_Pessoa_Papel.FirstOrDefault(p => p.descricao == NomeCampoConstantes.campo_funcionarioBairro);
            dados.descricao = NomeCampoConstantes.campo_funcionarioBairro;
            dados.valor = values.First(p => p.Key == NomeCampoConstantes.campo_funcionarioBairro).Value;
            pessoaPapel.Dados_Pessoa_Papel.Add(dados);

            dados = pessoaPapel.Dados_Pessoa_Papel.FirstOrDefault(p => p.descricao == NomeCampoConstantes.campo_funcionarioCep);
            dados.descricao = NomeCampoConstantes.campo_funcionarioCep;
            dados.valor = values.First(p => p.Key == NomeCampoConstantes.campo_funcionarioCep).Value;
            pessoaPapel.Dados_Pessoa_Papel.Add(dados);
            
            return perfilFacade.editaPerfil(pessoa);
        }

        public Object retornaPessoaCliente(int id)
        {
            Pessoa plan = new Pessoa();
            
            PerfilFacade perfilFacade = PerfilFacade.getInstance();
            Pessoa pessoa = (Pessoa)perfilFacade.retornaPerfil(id);

            IDictionary<string, string> values = new Dictionary<string, string>();

            values.Add(NomeCampoConstantes.campo_pessoaNome, pessoa.Name);
            values.Add(NomeCampoConstantes.campo_pessoaSobrenome, pessoa.LastName);

            values.Add(NomeCampoConstantes.campo_funcionarioEndereco,
                pessoa.Pessoa_Papel.First().Dados_Pessoa_Papel.Where(p => p.descricao == NomeCampoConstantes.campo_funcionarioEndereco).First().valor);
            values.Add(NomeCampoConstantes.campo_funcionarioComplemento,
                pessoa.Pessoa_Papel.First().Dados_Pessoa_Papel.Where(p => p.descricao == NomeCampoConstantes.campo_funcionarioComplemento).First().valor);
            values.Add(NomeCampoConstantes.campo_funcionarioCidade,
                pessoa.Pessoa_Papel.First().Dados_Pessoa_Papel.Where(p => p.descricao == NomeCampoConstantes.campo_funcionarioCidade).First().valor);
            values.Add(NomeCampoConstantes.campo_funcionarioBairro,
                pessoa.Pessoa_Papel.First().Dados_Pessoa_Papel.Where(p => p.descricao == NomeCampoConstantes.campo_funcionarioBairro).First().valor);
            values.Add(NomeCampoConstantes.campo_funcionarioCep,
                pessoa.Pessoa_Papel.First().Dados_Pessoa_Papel.Where(p => p.descricao == NomeCampoConstantes.campo_funcionarioCep).First().valor);

            values.Add(NomeCampoConstantes.campo_pessoaResidencial, pessoa.HomePhone.ToString());
            values.Add(NomeCampoConstantes.campo_pessoaCelular, pessoa.CelPhone.ToString());
                        
            values.Add(NomeCampoConstantes.campo_pessoaLogin, pessoa.Login);
            return values;
        }
    }
}
